///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
*	Contains a simple pair class.
*	\file		LaborPairs.h
*	\author		Pierre Terdiman
*	\date		January, 13, 2003
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Guard
#ifndef __LABORPAIRS_H__
#define __LABORPAIRS_H__
#include "../LaborCoreDef.h"
NAMESPACE_LABOR3D_BEGIN
//! A generic couple structure
struct  LABORCORE_API CLPair
{
	inline	CLPair()	{}
	inline	CLPair(unsigned int i0, unsigned int i1) : id0(i0), id1(i1)	{}

	unsigned int	id0;	//!< First index of the pair
	unsigned int	id1;	//!< Second index of the pair
};

class  xlPairs : private CLContainer
{
public:
	// Constructor / Destructor
	xlPairs()						{}
	~xlPairs()						{}

	inline	unsigned int			getNbPairs()		const		{ return getNbEntries()>>1;					}
	inline	const CLPair*	getPairs()			const		{ return (const CLPair*)getEntries();			}
	inline	const CLPair*	getPair(unsigned int i)	const			{ return (const CLPair*)&getEntries()[i+i];	}

	inline	bool			hasPairs()			const		{ return isNotEmpty();						}

	inline	void			resetPairs()					{ reset();									}
	inline	void			deleteLastPair()				{ deleteLastEntry();	deleteLastEntry();	}

	inline	void			addPair(const CLPair& p)			{ add(p.id0).add(p.id1);					}
	inline	void			addPair(unsigned int id0, unsigned int id1)		{ add(id0).add(id1);						}
};

NAMESPACE_LABOR3D_END

#endif // __LABORPAIRS_H__
